// reduce 
            // 编程范式：命令式编程/声明式编程
            // 编程范式：面向对象编程(第一公民：对象)  函数式编程(第一公民：函数)
            // 函数式编程

            // 高阶函数   filter/map/reduce

            const nums = [10,20,111,222,444,40,50]
            // filter的回调函数有一个要求；必须返回布尔值
            // true:当返回true时，函数内部会自动将这次回调的n加入到新数组中
            // false:当返回false,函数会自动将这次的n过滤掉
            // let newNums = nums.filter(function(n){
            //     return n < 100
            // })
            // console.log(newNums)
            //  // map的使用
            // let new2Nums =  newNums.map(function(n){
            //      return n*2
            //  })
            //  console.log(new2Nums)
            // //  reduce
            // // 作用对数组的所有内容进行汇总的
            // let total = new2Nums.reduce(function(preValue,n){
            //     return  preValue + n
            // },0)
            // console.log(total)


// let total = nums.filter(function(n){
//     return n < 100
// }).map(function(n){
//     return  n*2
// }).reduce(function(pre,n){
// return pre+n
// },0)

let total = nums.filter(n => n <100).map(n => n*2).reduce((pre,n) => pre + n)

console.log(total);








            // // 1.取出小于100的素有数字
            // let newNums = []
            // for(let n of nums){
            //     if(n < 100){
            //         newNums.push(n) 
            //     }
            // }
            // console.log(newNums)
            // // 2.将所有小于100的数字进行转化，全部乘以2
            // let aa = [];
            // for(let n of newNums){
            //     aa.push(n*2)
            // }
            // console.log(aa)

            // // 3将所有的aa数字相加，得到最终的结果
            // let total = 0;
            // for(let n of aa){
            //     total += n
            // }
            // console.log(total)